package com.team01.pokemon.mapper;

import com.team01.pokemon.entity.Moves;
import com.team01.pokemon.vo.MovesDetailVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 招式表 Mapper 接口
 * </p>
 *
 * @author author
 * @since 2025-09-13
 */
public interface MovesMapper extends BaseMapper<Moves> {

        /**
         * 根据宝可梦名称查询其可学习的技能
         * 
         * @param pokemonName 宝可梦名称
         * @param learnMethod 学习方式（可选）
         * @param minLevel    最小等级（可选）
         * @param maxLevel    最大等级（可选）
         * @return 技能详情列表
         */
        List<MovesDetailVO> getMovesByPokemonName(@Param("pokemonName") String pokemonName,
                        @Param("learnMethod") String learnMethod,
                        @Param("minLevel") Integer minLevel,
                        @Param("maxLevel") Integer maxLevel);

        /**
         * 根据宝可梦ID查询其可学习的技能
         * 
         * @param pokemonId   宝可梦ID
         * @param learnMethod 学习方式（可选）
         * @param minLevel    最小等级（可选）
         * @param maxLevel    最大等级（可选）
         * @return 技能详情列表
         */
        List<MovesDetailVO> getMovesByPokemonId(@Param("pokemonId") Integer pokemonId,
                        @Param("learnMethod") String learnMethod,
                        @Param("minLevel") Integer minLevel,
                        @Param("maxLevel") Integer maxLevel);

        /**
         * 根据属性名称查询该属性的所有技能
         * 
         * @param typeName 属性名称
         * @return 技能详情列表
         */
        List<MovesDetailVO> getMovesByTypeName(@Param("typeName") String typeName);

        /**
         * 根据技能名称搜索技能
         * 
         * @param moveName 技能名称
         * @return 技能详情列表
         */
        List<MovesDetailVO> getMovesByMoveName(@Param("moveName") String moveName);

        /**
         * 根据等级区间查询技能
         * 
         * @param minLevel    最小等级
         * @param maxLevel    最大等级
         * @param learnMethod 学习方式（可选）
         * @return 技能详情列表
         */
        List<MovesDetailVO> getMovesByLevelRange(@Param("minLevel") Integer minLevel,
                        @Param("maxLevel") Integer maxLevel,
                        @Param("learnMethod") String learnMethod);

        /**
         * 获取所有技能（按编号排序）
         * 
         * @return 技能详情列表
         */
        List<MovesDetailVO> getAllMoves();

}
